<?php
/**
 * Eren Framework
 * 
 * Page list Class
 * 
 * @category System
 * @author Manu Soros Leu
 * @copyright manusoros@gmail.com
 */

class Eren_PageListBar
{
    private $total;
    private $perPageTotal;
    private $nowPage;
    private $listSize;

    /**
    * 初始化类
    *
    * @para $totalTemp; 信息的总数量
    * @para $nowPageTemp;现在页
    * @para $perPageTotalTemp;每一页显示信息数量
    * @para $listSizeTemp;导航栏的大小
    *
    * @return void
    */
    public function __construct($totalTemp = 50, $nowPageTemp = 1, $perPageTotalTemp = 10, $listSizeTemp = 10)
    {
        $this->total = $totalTemp;
        $this->nowPage = $nowPageTemp;
        $this->perPageTotal = $perPageTotalTemp;
        $this->listSize = $listSizeTemp;
    }

    /**
    * 设置信息的总数
    *
    * @return void
    */
    public function setTotal($totalTemp)
    {
        $this->total = $totalTemp;
    }
        
    /**
    * 设置现在页
    *
    * @return void
    */
    public function setNowPage($nowPageTemp)
    {
        $this->nowpage = $nowPageTemp;
    }
    
    
    /**
    * 设置每一页显示的数量
    *
    * @return void
    */
    public function setPerPageTotal($perPageTotalTemp)
    {
        $this->perPageTotal = $perPageTotalTemp;
    }

    /**
    * 设置导航栏的大小
    *
    * @return void
    */
    public function setListSize($listSizeTemp)
    {
        $this->listSize = $listSizeTemp;
    }

    /**
    * 获得总页数
    *
    * @return int;
    */    
    public function getTotalPage()
    {
        $totalReturn = $this->total/$this->perPageTotal;
        return ceil($totalReturn);
    }
    
    /**
     * 获得上一页
     */
    
    public function getNowPage()
    {
        return $this->nowPage;
    }
    
    public function getPrePage()
    {
        if($this->nowPage >1)
        {
            return $this->nowPage-1;
        }
        else 
        {
            return 1;
        }
    }
    
    /**
     * 获得下一页
     */
    
    public function getNextPage()
    {
        $totalPage = $this->getTotalPage();
        if($this->nowPage < $totalPage)
        {
            return $this->nowPage+1;
        }
        else 
        {
            return $totalPage;
        }
    }
    
    /**
     * 获得首页
     */
    
    public function getFirstPage()
    {
        return 1;
    }
    
    /**
     * 获得尾页
     */
    
    public function getLastPage()
    {
        return $this->getTotalPage();
    }
    
    /**
    * 获得分页导航列表
    *
    * @return array();
    */
    public function getPageList()
    {
        $pageList = array();
        $pageTotal = $this->GetTotalPage();
        //记录分页列表栏的长度的一半，因为当前页要显示在列表的中间，这样方便控制；
        $halfListSize = ceil($this->listSize/2) - 1;
        //如果信息的总页数小于分页列表栏的长度，则把所有页都显示；
        if($pageTotal<=$this->listSize)
        {
            $start = 1;
            $end = $pageTotal;
        }
        //如果当前页大于列表的一半，并且当前页与总页数的距离也大于列表的一半，列表以当前页为分割点，向前推一半，向后推一半；
        else if($this->nowPage - $halfListSize > 0 && $pageTotal - $this->nowPage > $halfListSize)
        {
            $start = $this->nowPage - $halfListSize;
            $end = $this->nowPage + $halfListSize;
            //如果是偶数，前一半比后一半少一个；
            if($halfListSize == $this->listSize/2 -1) $end = $end +1;
        }
        //如果当前页与总页数的距离小于列表的一半，则从总页数开始向前推列表长度个单位；
        else if($pageTotal - $this->nowPage <= $halfListSize)
        {
            $start = $pageTotal - $this->listSize + 1;
            $end = $pageTotal;
        }
        //其他情况，则直接从首页开始显示列表长度个单位；
        else
        {
            $start = 1;
            $end = $this->listSize;
        }
        for($i = $start;$i<=$end;$i++)
            $pageList[] = $i;
        return $pageList;
    }
}